<?php
/* 
* 公司职位管理模型
*/

class ComPosModel extends Model{

	//定义表名
    public $table = "company_position";
    /**
    * 定义规则
    */
    public $validate = array(
        array("positionname", "nonull", "职位名称不能为空", 2, 3),
        array("sex", "num:0,2", "性别选择错误", 2, 3),
        array("quality", "num:1,3", "职位性质选择错误", 2, 3),
        array("invitenum", "num:1,200", "招聘人数必须1-200之间", 2, 3),
        array("validtime", "num:0,365:", "有效时间范围1-365天", 2, 3),

        array("pos_one", "num:1,200", "职位类别必须选择", 2, 3),
        array("pos_second", "regexp:/^\d+$/", "职位类别选择错误", 2, 3),

        array("city_one", "num:1,400", "工作地区必须选择", 2, 3),
        array("city_second", "regexp:/^\d+$/", "工作地区选择错误", 2, 3),

        array("edu", "num:1,10", "请选择学历", 3, 3),
        array("workyear", "num:1,7", "请选择工作", 3, 3),
        array("salary", "num:1,7", "请选择月薪范围", 2, 3),
        array("description", "minlen:30", "职位描述内容不能小于30个字符", 2, 3),
        array("freshstu", "num:0,1", "应届生应聘选择错误", 2, 3),
        array("weekrest", "num:0,2", "每周休息选择错误", 2, 3),
        array("insure", "num:0,2", "缴纳保险选择错误", 2, 2)
    );

    /**
     * 自动完成
     */
    public $auto = array(
        array("city_cityid", "_cityId","method",2, 3),
        array("cate_posid", "_posid", "method", 2, 3),
        array("sendtime", "_sendtime", "method", 2, 1),
        //结束时间 必须处理的表单，任何时候都处理
        array("endtime", "_endtime", "method", 2, 3),
        //有效时间，必须处理的表单，任何时候都处理
        array("validtime", "_validtime", "method", 2,3),

        array("user_uid", "_uid", "method", 2, 3)
    );

    /**
     * [_validtime 自动完成处理有效时间，第一次插入时候只保存post提交过来的值，第二次为增加有效时间，也就是
     * 把以前的有效时间拿出来相加，再存储]
     * @return [type] [description]
     */
    public function _validtime(){
        $validtime = Q('post.validtime', 0, 'intval');
        //如果有post提交，证明是修改,ovalidtime是以前的旧时间
        if(Q('post.cpid', 0, 'intval') && $oldtime = Q('post.ovalidtime', 0, 'intval')){
            //与以前的时间相加返回
            return $validtime + $oldtime;
        }
        //否则直接返回有效时间，也就是第一次添加的情况
        return $validtime;

    }
    /**
     * [_endtime 自动完成处理结束时间]
     * @return [type] [description]
     */
    public function _endtime(){
        //如果有post提交，证明是修改
        if($cpid = Q('post.cpid', 0, 'intval')){
            //用户输入的时间
            $validtime = Q('validtime', 0, 'intval');
            //以前旧有效时间，隐藏域
            $ovalidtime = Q('ovalidtime', 0, 'intval');
            //以前旧的发表时间
            $sendtime = Q('osendtime', 0, 'intval');
            //添加开始时间与有效时间
            $endtime = $sendtime + ( ($validtime + $ovalidtime) * 3600 * 24 );
            return $endtime;
        }
 
        return time() + Q('validtime', 0, 'intval') * 24 * 3600;
    }

    /**
     * [_uid 返回用户uid]
     * @return [type] [description]
     */
    public function _uid(){
        return session('uid');
    }
    /**
     * [_posid 处理职位id]
     * @return [type] [description]
     */
    public function _posid(){
         //接受一级顶级城市与二级城市
        $posOne = Q('post.pos_one', 0, 'intval');
        $posSecond = Q('post.pos_second', 0, 'intval');
        //如果二级城市不为0，就返回二级城市id，否则返回顶级id
        if($posSecond != 0){
            return $posSecond;
        }
        return $posOne;
    }
    /**
     * 自动完成处理城市
     */
    public function _cityId(){
        //接受一级顶级城市与二级城市
        $cityOne = Q('post.city_one', 0, 'intval');
        $citySecond = Q('post.city_second', 0, 'intval');
        //如果二级城市不为0，就返回二级城市id，否则返回顶级id
        if($citySecond != 0){
            return $citySecond;
        }
        return $cityOne;
    }

    /**
     * 自动完成处理发布时间
     */
    public function _sendtime(){
        return time();
    }

    /**
     * [get_pos 获得所有职位]
     * 1为审核中，2为审核通过，3为审核失败
     * @return [type] [description]
     */
    public function get_pos($uid=NULL){
         switch (Q('get.state', '', 'intval')) {
            case 1:
                $state = 1;
                break;
            case 2:
                $state = 2;
                break;
             case 3:
                $state = 3;
                break;
            
            default:
                $_GET['state'] = 0;
                break;
        }
        if(isset($state)){
            $where = array(
                 'user_uid'      =>  $uid,
                'verifystate'   =>  $state
                );
        }else{
             $where = array('user_uid'=>$uid);
        }

        if (!$uid)unset($where['user_uid']);

        // p($where);
        $total = $this->where($where)->count();

        $page = new page($total,5,5);
        $data = $this->where($where)->all($page->limit());
        // p($data);
        if(!$data) return null;

        //循环修改数据
        foreach ($data as $k => $v) {
            //修改审核状态
            switch ($v['verifystate']) {
                case 1:
                    $verifystate = '审核中';
                    break;
                
                case 2:
                    $verifystate = '审核通过';
                    break;

                case 3:
                    $verifystate = '审核失败';
                    break;
            }

            $data[$k]['verifystate'] = $verifystate;

            //职位状态
            $data[$k]['showstate'] = ($v['showstate'] == 0) ? '暂停招聘' : '招聘中';

            //有效时间
            $data[$k]['totime'] = date('Y-m-d', $v['sendtime']) . '--' . date('Y-m-d', $v['endtime']);

        }

        //把分页样式压入到$data
        $data['page'] = $page->show();
        return $data;
    }

       /**
     * [get_num 获得企业用户所发布职位总数]
     * @param  [int] $uid [用户uid]
     * @return [int]      [统计总数]
     */
    public function get_num($uid = NULL){
        if(is_null($uid)) $uid = session('uid');
        return $this->where(array('user_uid'=>$uid))->count('*');
    }
    /**
     * [pos_action 操作多条记录的，开始，暂停，删除动作]
     * @return [type] [description]
     */
    public function pos_action(){
        //接收所要操作的职位名称主键id，以数组的形式
        if(!$cpidArr = Q('post.cpid', 0, 'intval')) return;
        //限定当前用户
        $where['user_uid'] = session('uid');
        //-------------以下为循环操作每条记录
        //如果是设置为“一键提升排名”
        if(Q('post.fresh')){
            foreach($cpidArr as $v){
                $where['cpid'] = $v;
                //修改为当前时间
                $this->where($where)->save(array('freshtime'=>time()));
            }
            return;
        }
        //如果是设置为“开始”
        if(Q('post.start')){
            foreach($cpidArr as $v){
                $where['cpid'] = $v;
                //修改为开启
                $this->where($where)->save(array('showstate'=>1));
            }
            return;
        }
        //如果是设置为“暂停”
        if(Q('post.pause')){
            foreach($cpidArr as $v){
                $where['cpid'] = $v;
                //修改为暂停
                $this->where($where)->save(array('showstate'=>0));
            }
            return;
        }
         //如果是设置为“删除”
        if(Q('post.delete')){
            foreach($cpidArr as $v){
                $where['cpid'] = $v;
                //删除
                $this->where($where)->delete();
            }
            return;
        }
    }

    /**
     * [add_data 添加职位动作，限制一个用户只允许发布20个职位]
     */
    public function add_data(){
        if($this->where(array('user_uid'=>session('uid')))->count()>4) return false;
        $this->add();
        return true;
    }

    /**
     * [pos_save 通过职位主键id修改职位信息]
     * @param  [type] $cpid  职位主键id
     * @return [type]
     */
    public function pos_save($cpid){
        //通过主键id修改信息执行save修改方法
        $this->where(array('cpid'=>$cpid))->save();

    }
        /**
     * [get_id_pos 通过id调取职位信息]
     * @param  [int] $cpid 职位主键id
     * @param  [str] $field [自定义字段]
     * @return [array]
     */
    public function get_id_pos($cpid,$field = NULL){
        $data = $this->field($field)->find($cpid);
        //如果获取结束时间
        if(isset($data['endtime'])){
            //如果结束时间大于当前时间证明没有过期格式化天数存储到数组中
            if($data['endtime'] > time()){
                //格式化剩余天数
                $data['remaintime'] = ceil( ($data['endtime'] - time()) / (3600 * 24) );
            }
        }

        return $data;
    }
        /**
     * [get_uid_data 通过uid获得职位信息]
     * @param  [type] $uid   [用户uid]
     * @param  [type] $field [自定义字段]
     * @param  integer $cityOn [是否组合城市信息]
     * @return [type]        [description]
     */
    public function get_uid_data($uid=NULL,$field=NULL,$cityOn=0){
        //如果为空默认是session里面的uid
        if(is_null($uid)) $uid = session('uid');
        //组合where条件，而且必须是审核通过，而且没有过期
         $where = array(
            'user_uid'      =>  $uid,
            'verifystate'   =>  2,
            'endtime'       =>  array('gt'=>time())
            );
        //取得当前用户的所有招聘岗位信息
       $data = $this->where($where)->field($field)->findAll();
        if(is_null($data)) return null;
       //定义城市模型
       $cityModel = K('City');
       //如果组合城市信息开启，进行遍历循环
       if($cityOn){
            foreach($data as $k => $v){
                //组合好城市信息重新放入到数组中
                $data[$k] = $cityModel->get_old_city($v, 'city_cityid');
            }
            return $data;
       }
       //否则直接反出数据
       return $data;

    }

    /**
     * [check_pos_pass 检测职位是否有或者是否通过]
     * @param  [type] $cpid [description]
     * @return [type]       [description]
     */
    public function check_pos_pass($cpid){
        $where = array(
            'verifystate'   =>  2,
            'endtime'       =>  array('gt'=>time()),
            'showstate'     =>  1,
            'cpid'          =>  $cpid
            );
        
        return $this->where($where)->getField('cpid');

    }


     /**
     * 改变审核状态
     * @return [type] [description]
     */
    public function change_verify($where,$verify){
        
        $this->where($where)->save(array('verifystate'=>$verify));
    }
}


















